package poo.util;

public class MetodiOrdinamento {

	public static void selectionSort(double[] a) {
		for (int j = a.length - 1; j > 0; j--) {
			// cerca max tra a[0]...a[j]
			int iMax = 0;
			for (int i = 1; i <= j; i++)
				if (a[i] > a[iMax])
					iMax = i;
			// scambia a[iMax] con a[j]
			double park = a[iMax];
			a[iMax] = a[j];
			a[j] = park;
		}
	}

	public static void bubbleSort(int[] x) {
		int temp = 0;
		for (int j = 0; j < x.length; j++) {
			for (int i = j; i < x.length; i++) {
				if (x[j] > x[i]) {
					temp = x[j];
					x[j] = x[i];
					x[i] = temp;
				}// fine if
			}// fine for
		}// fine for
	}// fine bubbleSort

	public static void bubbleSort(double[] a) {
		int ius = 0; // indice ultimo scambio - inizializzazione fittizia
		for (int j = a.length - 1; j >= 1; j = ius) {
			int scambi = 0; // contatore scambi
			for (int i = 0; i < j; i++)
				if (a[i] > a[i + 1]) {// scambia
					double park = a[i];
					a[i] = a[i + 1];
					a[i + 1] = park;
					scambi++;
					ius = i;
				}
			if (scambi == 0)
				break;
		}// for
	}// bubbleSort

	public static void insertionSort(double[] a) {
		for (int i = 0; i < a.length; i++) {
			double x = a[i];
			int j = i;
			while (j > 0 && a[j - 1] > x) {
				a[j] = a[j - 1];
				j--;
			}
			a[j] = x;
		}
	}// insertionSort

	public static void main(String[] args) {

		double[] vettore = { 5.3, 7, 8, 3, 5, 7, 0, 0.1, 8 };
		ArrayUtils.printArrayDouble(vettore);
		System.out.println();
		selectionSort(vettore);
		ArrayUtils.printArrayDouble(vettore);
		System.out.println();
		bubbleSort(vettore);
		ArrayUtils.printArrayDouble(vettore);
		System.out.println();
		insertionSort(vettore);
		ArrayUtils.printArrayDouble(vettore);

	}

}
